package com.gonsin.gview.annotations.board.table;

import cn.hutool.db.meta.Column;
import com.gonsin.gview.annotations.board.form.GFormItem;
import com.gonsin.gview.annotations.enums.ColumnType;
import com.gonsin.gview.annotations.board.GButton;
import com.gonsin.gview.annotations.filter.ColumnFilter;
import com.gonsin.gview.annotations.filter.NoFilter;

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

/**
 * 一列
 */
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface GColumn {

    /**
     * 是否有效
     */
    boolean enable() default true;

    /**
     * 一列标题显示的名字
     */
    String name() default "";

    /**
     * 一列中显示对应的字段
     */
    String keyName() default "";

    /**
     * 和keyName作用相同，keyName是直接显示对应的字段，value是动态显示字段值
     * 使用mustache注入，如果value为""时，显示keyName对应的值，如果value非空时显示value的内容
     * 用法例如：
     * {{item.createTime}}
     * /files/{{item.filename}}
     */
    String value() default "";

    /**
     * 日期显示格式
     */
    String format() default "yyyy年MM月dd日 HH:mm";

    /**
     * 枚举类型，columnType = enums时有效
     */
    GEnum[] enums() default {};

    /**
     * 内置枚举名字，根据枚举名字获取枚举内容
     * 内置的枚举名字需要通过  {@code  GViewGlobalEnumsService}.addEnums
     */
    String enumName() default "";

    /**
     * 显示的按钮
     */
    GButton[] buttons() default {};

    /**
     * 列的类型
     */
    ColumnType columnType() default ColumnType.TEXT;

    /**
     * 宽度占比
     */
    int weight() default 1;

    /**
     * 图片大小
     */
    String imageSize() default "100x100";

    /**
     * 列表里塞入控件
     */
    GFormItem[] formItems() default {};

}
